import router from '@/router'
export default {
  namespaced: true, // 解决不同模块的命名冲突问题
  state:  () => ({
    verification: '',  // 验证码
    userInfo: {} // 当前登录用户信息
  }),
  getters: {
    /**
     * 获取验证码
     * @param state
     * @return {string|*}
     */
    getVerification(state){
      return state.verification
    },
    /***
     * 获取当前用户信息
     * @param state vuex中的值对象
     * @returns {Object} 当前用户信息
     */
    getUserInfo(state){
      return state.userInfo
    }
  },
  mutations: {
    /**
     * 设置验证码
     * @param state
     * @param value
     */
    SET_VERIFICATION(state, value) {
      state.verification = value
    },
    /**
     * 设置当前用户信息,执行登录操作
     * @param state vuex中的值对象
     * @param val 当前用户信息
     */
    SET_USERINFO (state, val) {
      sessionStorage.setItem('access_token', val.accessToken)
      state.userInfo = val.info
    },
    /**
     * 执行登出操作
     * @param state
     * @constructor
     */
    async REMOVE_USERINFO(state) {
      window.sessionStorage.removeItem('access_token')
      state.userInfo = {}
      await router.push({ path: '/' })
    }
  },
  actions: {
    /**
     * 修改验证码
     * @param commit
     * @param value
     */
    async changeVerification({commit}, value) {
      commit('SET_VERIFICATION', value);
    },
    /***
     * 登录方法
     * @param commit 对象结构
     * @param val 当前用户信息
     */
    async login({commit, dispatch}, val){
      // 登录有值时是登录，无值时是推出方法
      if (val) {
        // 调用主store中的权限路由筛选方法
        dispatch('initPermissionRouters', val, { root: true})
        commit('SET_USERINFO', val)
      } else {
        // 退出方法
        // 重置模块路由信息
        commit('RESET_MODULEROUTES', {}, { root: true})
        commit('REMOVE_USERINFO')
      }

    }
  }
}
